MongoDB Upsert 您所在的位置:网站首页 mongo upsert MongoDB Upsert

MongoDB Upsert

2024-04-11 11:09| 来源: 网络整理| 查看: 265

MongoDB Upsert

在 MongoDB 中,upsert 是一种用于在任何操作中插入和更新值的方法。换句话说,MongoDB upsert 方法是插入和更新的组合(插入 + 更新 = upsert)。默认情况下,upsert 方法的值始终为 false。如果文档与指定的查询匹配并且方法的值设置为 true,则更新操作将更新匹配的文档。如果文档与指定的查询不匹配并且方法的值设置为 true,则此方法会在集合中插入一个新文档。此新文档包含指示操作的字段。

MongoDB Upsert 语法: upsert:

upsert 选项的值将是 true 或 false。

使用 findAndModify() 函数更新插入:

用户可以将 upsert 选项与 findAndModify() 函数结合使用。在此函数中,选项的默认值为 false。如果此选项的值设置为 true,则函数执行以下操作之一:

如果找到与给定查询条件匹配的文档,则 findAndModify() 函数会更新该文档。 如果没有文档匹配给定的查询条件,findAndModify() 函数将一个新文档插入到集合中。

语法:

db.Collection_name.findAndModify( { selection_criteria:, sort: , remove: , update: , new: , fields: , upsert: , bypassDocumentValidation: , writeConcern: , collation: , arrayFilters: [ , ? ] })

例如:

在这个例子中,我们正在使用

Database: yiidian Collection: student Database: three documents that contain details of students db.student.find().pretty() { "_id" : ObjectID("60353f44f196547db6325eb32"), "std_name" : "Jhon", "address" : "England" "passout" : 2018 } { "_id" : ObjectID("60353f44f196547db6325eb33"), "std_name" : "Mike", "address" : "Japan" "passout" : 2019 } { "_id" : ObjectID("60353f44f196547db6325eb34"), "std_name" : "Sam", "address" : "Australia" "passout" : 2016 }

现在我们将通过将 upsert 选项设置为 true 来在学生集合中插入一个新文档。

db.student.findAndModify({query:{name:"Jack"}, update:{$set:{address:"Australia"}}, upsert:true})

在这里,没有数据与名称“jack”匹配,因此 findAndModify() 函数插入一个包含两个字段(即“name”和“address”)的新文档,因为 upsert 方法的值设置为 true。

使用 update() 函数更新插入:

您可以将 upsert 选项与 update() 函数结合使用。在此函数中,选项的默认值为 false。如果此选项的值设置为 true,则函数执行以下操作之一:

如果找到与给定查询条件匹配的文档,则 update() 函数会更新该文档。 如果没有文档与给定的查询条件匹配,update() 函数将一个新文档插入到集合中。

语法:

db.Collection_name.update({Selection_criteria}, {$set : {Update_data}}, { upsert : , multi : , writeConcern : , collation : , arrayFilters : [ , . . . ? ], hint : })

例如:

在这个例子中,我们正在使用

Database: yiidian Collection: student Database: three documents that contain details of students db.student.find().pretty() { "_id" : ObjectID("60353f44f196547db6325eb32"), "std_name" : "Jhon", "address" : "England" "passout" : 2018 } { "_id" : ObjectID("60353f44f196547db6325eb33"), "std_name" : "Mike", "address" : "Japan" "passout" : 2019 } { "_id" : ObjectID("60353f44f196547db6325eb34"), "std_name" : "Sam", "address" : "Australia" "passout" : 2016 }

现在我们将通过将 upsert 选项设置为 true 来在学生集合中插入一个新文档。

db.employee.update({name:"Priya"}, {$set: {department: "HR"}},{upsert:true})

在这里,没有数据与名称“Noah”匹配,因此 update() 函数插入一个包含两个字段(即“name”和“address”)的新文档,因为 upsert 方法的值设置为 true。

使用运算符表达式进行更新插入:

如果文档与给定数据不匹配并且 upsert 选项的值设置为 true,则更新操作会根据给定查询参数中的相似性子句创建新文档,并应用更新参数中的表达式。

例如:

在这个例子中,我们正在使用

Database: yiidian Collection: employee Database: four documents that contain details of employees > db.employee.find().pretty() { "_id" : ObjectID("60545245fa51254k5634hg412") "Employee_ID" : "125" "Name" : "Nick" "Phone Number" : "6267896546" } { "_id" : ObjectID("60545245fa51254k5634hg413") "Employee_ID" : "129" "Name" : "John pie" "Phone Number" : "6965453164" } { "_id" : ObjectID("60545245fa51254k5634hg414") "Employee_ID" : "135" "Name" : "Jack" "Phone Number" : "7516584359" } { "_id" : ObjectID("60545245fa51254k5634hg415") "Employee_ID" : "140" "Name" : "Thomas" "Phone Number" : "9654778546" }

现在我们将通过将 upsert 选项的值设置为 true 来在Employees 集合中插入一个新文档。

db.employee.update({Name: "Hnery"}, // Query parameter {$set: {Phone Number: '9654785423 '}, // Update document $setOnInsert: {Gender: 'Male'}}, {upsert: true})

在这里,update() 方法根据查询条件创建一个带有字段“Name : Hnery”的新文档,然后对该文档应用 $set 和 $setOnInsert 操作。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有